<?php 
/**
* ============================================================================
* (C) 2007-2011
* {@link http://fanhougame.com/}
* ============================================================================
* @link http://hi.baidu.com/wangxinhui419/
* @Copyright (c) 2006-2011  2011-2-11 {@link http://hi.baidu.com/wangxinhui419/}
* @author charles
* @license http://www.php.net/ PHP License 5.2.6
* @version 2011-2-11
* @package 
*/

class Validator {

    /**
     * 规则列表
     */
    protected static $_rules = array(
        'not_null' => 'is_null',
        'int'=>'is_int',
        'num'=>'is_num',
        'string'=>'is_string',
        'alnum'=>'is_alnum', //字母和数字
        'alnumu'=>'is_alnumu', //字母数字和下划线
        'char'=>'is_alnumu',
        'english'=>'is_english',
        'chinese'=>'is_chinese',
        'email'=>'is_email',
        'between'=>'is_between',
        'equal'=>'is_equal',
        'more_than'=>'is_more_than',
        'less_than'=>'is_less_than',
        'max'=>'is_max',
        'min'=>'is_min',
        'max_length'=>'is_max_length',
        'min_length'=>'is_min_length'
    );

    /**
     * 检查数据合法性
     * @param mix $value
     * @param string $rule
     */
    static function validate($value,$rule){
        $t_rule = explode(':', $rule); //解析 规则 rule

        $func = self::$_rules[$t_rule[0]];
        $compare = isset($t_rule[1])?$t_rule[1]:null;
   
        return self::$func($value,$compare);
    }

    /**
     * 正则方法检查数据合法性
     * @param mix $value
     * @param string $regex
     */
    static function validatebyRegex($value,$regex){
        return preg_match($regex, $value);
    }

    static function is_null($value){
        return is_null($value);
    }

    static function is_int($value){
        return is_int($value);
    }

    static function is_float($value){
        return is_float($value);
    }

    static function is_num($value){
        return is_numeric($value);
    }

    static function is_string($value){
        return is_string($value);
    }

     /**
     * 判断是否是字母和数字
     */
    static function is_alnum($value){
        return ctype_alnum($value);
    }

    /**
     * 判断是否是字母数字和下划线
     */
    static function is_alnumu($value){
        return preg_match('/^[A-Za-z0-9\__]+$/', $value) != 0;
    }

    /**
     * 判断是否是英文
     */
    static function is_english($value){
        return ctype_alpha($value);
    }

    /**
     * 判断是否是纯中文
     */
    static function is_chinese($value){
        return !eregi("[^\x80-\xff]","$value");
    }

    /**
     * 判断是否是Email 地址
     */
    static function is_email($value){
        return preg_match('/^[A-Za-z0-9]+([._\-\+]*[A-Za-z0-9_]+)*@([A-Za-z0-9]+[-A-Za-z0-9]*[A-Za-z0-9]+\.)+[A-Za-z0-9]+$/', $value) != 0;
    }

    /**
     * 判断数值是否在两数之间,两个数字用','逗号。
     * 
     *   例如： is_between(4,'3,7'); return true
     * @param num $value
     * @param string $compare
     */
    static function is_between($value,$compare){
        $nums = explode(',', $compare);
        return ($value>=$nums[0]&&$value<=$nums[1]);
    }

    /**
     * 判断两个数字是否相等
     * @param num $value
     * @param num $compare
     */
    static function is_equal($value, $compare){
        return $value==$compare;
    }

    /**
     * 判断是否是大于对比数字
     * @param num $value
     * @param num $compare
     */
    static function is_more_than($value,$compare){
        return $value>$compare;
    }

    /**
     * 判断是否小于对比数字
     * @param num $value
     * @param num $compare
     */
    static function is_less_than($value,$compare){
        return $value<$compare;
    }

    /**
     * 判断是否小于等于对比数字，即最大数字是否是该数字
     * @param num $value
     * @param num $compare
     */
    static function is_max($value,$compare){
        return $value<=$compare;
    }

    /**
     * 判断是否大于等于对比数字，即最小数字是否是该数字
     * @param num $value
     * @param num $compare
     */
    static function is_min($value,$compare){
        return $value>=$compare;
    }

    /**
     * 判断字符长度是否在小于等于某数字
     * @param string $value
     * @param num $compare
     */
    static function is_max_length($value,$compare){
        return strlen($value)<=$compare;
    }

    /**
     * 判断字符长度是否在大于等于某数字
     * @param string $value
     * @param num $compare
     */
    static function is_mix_length($value,$compare){
        return strlen($value)>=$compare;
    }
}
?>
